package com.lzy.imagepicker.util;

import ohos.aafwk.ability.Ability;
import ohos.aafwk.ability.DataAbilityHelper;
import ohos.aafwk.ability.DataAbilityRemoteException;
import ohos.media.image.ImageSource;
import ohos.media.image.common.PropertyKey;
import ohos.utils.net.Uri;

import java.io.FileNotFoundException;


/**
 * Bitmap工具类，主要是解决拍照旋转的适配
 * <p>
 * Author: nanchen
 * Email: liushilin520@foxmail.com
 * Date: 2017-03-20  13:27
 */

public class BitmapUtil {

    private BitmapUtil() {
        throw new UnsupportedOperationException("u can't instantiate me...");
    }

    /**
     * 获取图片的旋转角度
     *
     * @param path 图片绝对路径
     * @return 图片的旋转角度
     */
    public static int getBitmapDegree(String path) {
        int degree = 0;
        try {
            // 从指定路径下读取图片，并获取其EXIF信息
            ImageSource imageSource = ImageSource.create(path, new ImageSource.SourceOptions());
//            ExifInterface exifInterface = new ExifInterface(path);
            // 获取图片的旋转信息
            int orietation = imageSource.getImagePropertyInt(PropertyKey.Exif.ORIENTATION, 0);
            degree = orietation;
//            int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
//            switch (orientation) {
//                case ExifInterface.ORIENTATION_ROTATE_90:
//                    degree = 90;
//                    break;
//                case ExifInterface.ORIENTATION_ROTATE_180:
//                    degree = 180;
//                    break;
//                case ExifInterface.ORIENTATION_ROTATE_270:
//                    degree = 270;
//                    break;
//            }
        } catch (Exception e) {
            return degree;
        }
        return degree;
    }

    public static int getBitmapDegree(Ability ability, String uriScheme) {
        int degree = 0;
        try {
            DataAbilityHelper helper = DataAbilityHelper.creator(ability);
            ImageSource.SourceOptions options = new ImageSource.SourceOptions();
            ImageSource source = ImageSource.create(helper.openFile(Uri.parse(uriScheme), "r"), options);
            int orietation = source.getImagePropertyInt(PropertyKey.Exif.ORIENTATION, 0);
            degree = orietation;
        } catch (DataAbilityRemoteException | FileNotFoundException e) {
            return degree;
        }
        return degree;
    }

//    /**
//     * 将图片按照指定的角度进行旋转
//     *
//     * @param pixelmap 需要旋转的图片
//     * @param degree   指定的旋转角度
//     * @return 旋转后的图片
//     */
//    public static PixelMap rotateBitmapByDegree(PixelMap pixelmap, int degree) {
//        // 根据旋转角度，生成旋转矩阵
//        Matrix matrix = new Matrix();
//        matrix.postRotate(degree);
//        // 将原始图片按照旋转矩阵进行旋转，并得到新的图片
//        PixelMap newBitmap = PixelMap.createBitmap(pixelmap, 0, 0, pixelmap.getImageInfo().size.width, pixelmap.getHeight(), matrix, true);
//        if (!pixelmap.isRecycled()) {
//            pixelmap.recycle();
//        }
//        return newBitmap;
//    }
//
//    /**
//     * 获取我们需要的整理过旋转角度的Uri
//     *
//     * @param ability 上下文环境
//     * @param path    路径
//     * @return 正常的Uri
//     */
//    public static Uri getRotatedUri(Activity ability, String path) {
//        int degree = BitmapUtil.getBitmapDegree(path);
//        if (degree != 0) {
//            PixelMap pixelmap = BitmapFactory.decodeFile(path);
//            PixelMap newBitmap = BitmapUtil.rotateBitmapByDegree(pixelmap, degree);
//            return Uri.parse(AVStorage.Images.Media.insertImage(ability.getContentResolver(), newBitmap, null, null));
//        } else {
//            return Uri.getUriFromFile(new File(path));
//        }
//    }
//
//    /**
//     * 将图片按照指定的角度进行旋转
//     *
//     * @param path   需要旋转的图片的路径
//     * @param degree 指定的旋转角度
//     * @return 旋转后的图片
//     */
//    public static PixelMap rotateBitmapByDegree(String path, int degree) {
//        PixelMap pixelmap = BitmapFactory.decodeFile(path);
//        return rotateBitmapByDegree(pixelmap, degree);
//    }

}
